package com.bolins.util;


import java.util.Random;


public class RandomString {

	public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
	public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
	public static final String numberChar = "0123456789"; 
	
	
	/*
	** 
	* 返回一个定长的随机字符串(只包含大小写字母、数字) 
	* 
	* @param length 随机字符串长度 
	* @return 随机字符串 
	*/ 
	public static String generateString(int length) { 
		StringBuffer sb = new StringBuffer(); 
		Random random = new Random(); 
		for (int i = 0; i < length; i++) { 
			sb.append(allChar.charAt(random.nextInt(allChar.length()))); 
		} 
		return sb.toString(); 
	} 
	
	/**
	 * 返回一个定长的随机字符串(数字) 
	 * @param length
	 * @return
	 */
	public static String generateFixLengthNum(int length) {
		
		StringBuffer sb = new StringBuffer(); 
		Random random = new Random(); 
		for (int i = 0; i < length; i++) { 
			sb.append(numberChar.charAt(random.nextInt(numberChar.length()))); 
		} 
		return sb.toString(); 
	}
	

	/** 
	* 返回一个定长的随机纯字母字符串(只包含大小写字母) 
	* 
	* @param length 随机字符串长度 
	* @return 随机字符串 
	*/ 
	public static String generateMixString(int length) { 
		StringBuffer sb = new StringBuffer(); 
		Random random = new Random(); 
		for (int i = 0; i < length; i++) { 
			sb.append(allChar.charAt(random.nextInt(letterChar.length()))); 
		} 
		return sb.toString(); 
	} 

	/** 
	* 返回一个定长的随机纯大写字母字符串(只包含大小写字母) 
	* 
	* @param length 随机字符串长度 
	* @return 随机字符串 
	*/ 
	public static String generateLowerString(int length) { 
	return generateMixString(length).toLowerCase(); 
	} 

	/** 
	* 返回一个定长的随机纯小写字母字符串(只包含大小写字母) 
	* 
	* @param length 随机字符串长度 
	* @return 随机字符串 
	*/ 
	public static String generateUpperString(int length) { 
	return generateMixString(length).toUpperCase(); 
	} 

	/** 
	* 生成一个定长的纯0字符串 
	* 
	* @param length 字符串长度 
	* @return 纯0字符串 
	*/ 
	public static String generateZeroString(int length) { 
		StringBuffer sb = new StringBuffer(); 
		for (int i = 0; i < length; i++) { 
		sb.append('0'); 
		} 
		return sb.toString(); 
	} 

	/** 
	* 根据数字生成一个定长的字符串，长度不够前面补0 
	* 
	* @param num 数字 
	* @param fixdlenth 字符串长度 
	* @return 定长的字符串 
	*/ 
	public static String toFixdLengthString(long num, int fixdlenth) { 
		StringBuffer sb = new StringBuffer(); 
		String strNum = String.valueOf(num); 
		if (fixdlenth - strNum.length() >= 0) { 
		sb.append(generateZeroString(fixdlenth - strNum.length())); 
		} else { 
		throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常！"); 
		} 
		sb.append(strNum); 
		return sb.toString(); 
	} 

	/** 
	* 根据数字生成一个定长的字符串，长度不够前面补0 
	* 
	* @param num 数字 
	* @param fixdlenth 字符串长度 
	* @return 定长的字符串 
	*/ 
	public static String toFixdLengthString(int num, int fixdlenth) { 
		StringBuffer sb = new StringBuffer(); 
		String strNum = String.valueOf(num); 
		if (fixdlenth - strNum.length() >= 0) { 
		sb.append(generateZeroString(fixdlenth - strNum.length())); 
		} else { 
		throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常！"); 
		} 
		sb.append(strNum); 
		return sb.toString(); 
	} 

	
	
	public static void main(String[] args) { 
		System.out.println(generateString(15)); 
		System.out.println(generateMixString(15)); 
		System.out.println(generateLowerString(15)); 
		System.out.println(generateUpperString(15)); 
		System.out.println(generateZeroString(15)); 
		System.out.println(toFixdLengthString(123, 15)); 
		System.out.println(toFixdLengthString(123L, 15)); 
	} 

}





/**
 * 
 * 
 * 一、Java随机数的产生方式 

在Java中，随机数的概念从广义上将，有三种。 
1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 
2、通过Math.random()返回一个0到1之间的double值。 
3、通过Random类来产生一个随机数，这个是专业的Random工具类，功能强大。 

 

六、总结 

1、随机数很常用，在Java有三种产生方式，以Random随机数的使用最为复杂。 
2、Random类对象有是否带种子之分，带种子的只要种子相同，多次运行，生成随机数的结果总是那样。 
3、带种子随机数的带种子的对象创建方式有两种，效果一样。但是带种子的随机数用处似乎不大。 
4、Random的功能涵盖了Math.random()的功能。 
5、可以通过随机数去做实现随机字符串等复杂的随机数据。 
6、不要研究不重复的随机数，意义不大。 

*/




